home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 05 / 6 / DISK0564.ZIP / SOURCE.ARC / ASM.ARC / UTIL.ASM < prev   
Assembly Source File  |  1987-11-01  |  4KB  |  148 lines

  1.         TITLE   GENERAL-PURPOSE MSDOS UTILITIES
  2.         .XLIST
  3.         INCLUDE ASCII.DEF
  4.         .LIST
  5.  
  6.     DOSSEG
  7.     .MODEL    SMALL
  8.     .CODE
  9. EXTRN   COUT:NEAR
  10.         PUBLIC UC,UCSTR,SKIPSP,CPY,CPYCNT,TYPTX,FILL,ZERO
  11.         PUBLIC CMDSRC
  12.  
  13. ;       COMMON ASSEMBLY-LANGUAGE UTILITY ROUTINES
  14.  
  15. ;       UC = CONVERT CHARACTER IN AL TO UPPER-CASE
  16. ;
  17. UC      PROC    NEAR
  18.         CMP     AL,'a'
  19.         JC      SHORT UC1
  20.         CMP     AL,'z'+1
  21.         JNC     SHORT UC1
  22.         SUB     AL,'a'-'A'
  23. UC1:    RET
  24. UC      ENDP
  25.  
  26. ;       UCSTR = CONVERT A LINE (0-TERMINATED) TO UPPER-CASE
  27. ;
  28. ;       ENTRY:  DS:BX POINTS TO THE LINE
  29. ;       EXIT:   LINE CONVERTED, BX IS UNCHANGED
  30. ;       USES:   AL,FLAGS
  31. ;
  32. UCSTR   PROC    NEAR
  33.         PUSH    BX
  34. UCSTR0: MOV     AL,BYTE PTR [BX]
  35.         CALL    UC
  36.         MOV     BYTE PTR [BX],AL
  37.         INC     BX
  38.         CMP     AL,0
  39.         JNE     UCSTR0
  40.         POP     BX
  41.         RET
  42. UCSTR   ENDP
  43.  
  44. ;       SKIPSP = SKIP OVER BLANKS AND TABS
  45. ;       ENTRY:  [BX] POINTS TO CHAR. STRING
  46. ;       EXIT:   [BX] POINTS TO 1ST NON-BLANK CHAR., OR NULL
  47. ;               AL = 1ST NON-BLANK CHAR.
  48. ;               'C' FLAG SET IF AL=NULL.
  49. ;
  50. SKIPSP  PROC    NEAR
  51.         JMP     SHORT SKIPS1
  52. SKIPS0: INC     BX
  53. SKIPS1: MOV     AL,BYTE PTR [BX]
  54.         CMP     AL,SPACE
  55.         JE      SKIPS0
  56.         CMP     AL,TAB
  57.         JE      SKIPS0
  58.         CMP     AL,0
  59.         JE      SKIPS2
  60.         CLC                     ;CLEAR CARRY
  61.         RET
  62. SKIPS2: STC
  63.         RET
  64. SKIPSP  ENDP
  65.  
  66. ;       CPY = COPY CX BYTES FROM (SI) TO (DI)
  67. ;
  68. CPY     PROC    NEAR
  69.         CLD
  70.         REP     MOVSB
  71.         RET
  72. CPY     ENDP
  73.  
  74. ;       CPYCNT = COPY FROM (DS:SI) TO (ES:DI) UNTIL 0 BYTE TRANSFERRED
  75. ;       TRANSFERS CX BYTES MAXIMUM
  76. ;
  77. CPYCNT  PROC    NEAR
  78.         CLD
  79. CPYC0:  LODSB
  80.         STOSB
  81.         CMP     AL,0
  82.         JE      SHORT CPYC1
  83.         LOOP    CPYC0
  84. CPYC1:
  85.         RET
  86. CPYCNT  ENDP
  87.  
  88. ;       ZERO = CLEAR MEMORY (CX BYTES, STARTING AT ES:DI)
  89. ;
  90. ZERO    PROC    NEAR
  91.         MOV     AL,0
  92.  
  93. ;       FILL = FILL MEMORY (CX BYTES, STARTING AT ES:DI) WITH AL
  94. ;
  95. FILL:   CLD
  96.         REP     STOSB
  97.         RET 
  98. ZERO    ENDP
  99.  
  100. ;       TYPTX = TYPE TEXT IN LINE
  101. ;       LAST CHAR. HAS BIT [7] SET
  102. ;
  103. TYPTX   PROC    NEAR
  104.         PUSH    BP              ;SAVE REGISTERS
  105.         PUSH    BX
  106.         MOV     BP,SP
  107.         MOV     BX,[BP+4]       ;GET OFFSET OF DATA
  108.         DEC     BX              ;COMPENSATE FOR NEXT INC
  109. TYPTX1: INC     BX              ;BUMP POINTER
  110.         MOV     AL,BYTE PTR CS:[BX]      ;FETCH A CHAR.
  111.         AND     AL,7FH          ;STRIP HI BIT
  112.         CALL    COUT            ;PRINT IT
  113.         CMP     AL,BYTE PTR CS:[BX]      ;SEE IF HI BIT WAS SET
  114.         JE      TYPTX1          ;IF NOT, KEEP GOING
  115.         INC     BX              ;POINT 1 PAST END OF STRING
  116.         MOV     [BP+4],BX       ;FIX OFFSET IN RETURN LINK
  117.         POP     BX
  118.         POP     BP              ;RESTORE REGISTERS
  119.         RET
  120. TYPTX   ENDP
  121.  
  122. ;       CMDSRC = SEARCH FOR COMMAND IN LIST
  123. ;       ENTRY:  AL = COMMAND LETTER
  124. ;               BX POINTS TO LIST (0 BYTE ENDS IT)
  125. ;       EXIT:   AL = NUMBER OF COMMAND IN LIST, IF FOUND
  126. ;               AL = 0 IF NO MATCH
  127. ;
  128. CMDSRC  PROC    NEAR
  129.         PUSH    CX
  130.         MOV     CL,0
  131.         MOV     CH,AL
  132. CMDSR1: MOV     AL,BYTE PTR [BX]
  133.         CMP     AL,0
  134.         JE      SHORT NOMATCH
  135.         CMP     AL,CH
  136.         PUSHF
  137.         INC     BX
  138.         INC     CL
  139.         POPF
  140.         JNZ     CMDSR1
  141.         MOV     AL,CL
  142. NOMATCH:
  143.         POP     CX
  144.         RET
  145. CMDSRC  ENDP
  146.  
  147.         END
  148.